package com.hyt.it.ogt.ks.feign.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hyt.core.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * 考试-考生
 * </p>
 *
 * @author 刘恒活
 * @since 2020-05-15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value="考试考生", description="考试考生")
public class KwExamCandidate extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "考试ID")
    private String examId;

    @ApiModelProperty(value = "报名考生ID")
    private String candidateId;
    
    @ApiModelProperty(value = "政企考生ID")
    private String govCandidateId;

    @ApiModelProperty(value = "试卷ID")
    private String paperId;

    @ApiModelProperty(value = "试卷版本号")
    private String paperVersion;

    @ApiModelProperty(value = "是否自定义准考证，1表示是，0表示否")
    @TableField("is_self_define_admission")
    private Boolean selfDefineAdmission;

    @ApiModelProperty(value = "准考证号")
    private String admissionNumber;
    
    @ApiModelProperty(value = "是否被评卷系统获取，1 是，  0否")
    @TableField("is_acquired")
    private Integer acquired;

    @ApiModelProperty(value = "发送邮件状态：0：未投递，1：投递中，2：已投递，3：投递失败，4：已阅")
    @TableField("is_send_email")
    private Integer sendEmail;

    @ApiModelProperty(value = "发送短信状态：0：未投递，1：投递中，2：已投递，3：投递失败，4：已阅")
    @TableField("is_send_message")
    private Integer sendMessage;

    @ApiModelProperty(value = "是否强制收卷，1表示是，0表示否")
    @TableField("is_forbid_end_exam")
    private Boolean forbidEndExam;  

    @ApiModelProperty(value = "判分状态，1已判分，0待判分")
    private Boolean judgeScoreState;
    
    @ApiModelProperty(value = "迟到允许登录，1表示是，0表示否")
    private Boolean lateAllowLogin;

    @ApiModelProperty(value = "撤销交卷，1表示是，0表示否")
    private Boolean cancelFinishExamState;

    /**
     *  考生状态类型 CandidateStatusCode
     */
    @ApiModelProperty(value = "考生状态，0未开考，10：已登录；20：已开考；21:中断；30：已交卷/已完成；40：缺考；50：因故未缺考；")
    private Integer state;

    @ApiModelProperty(value = "客观题总分数")
    private BigDecimal objectiveScore;

    @ApiModelProperty(value = "主观题总分数")
    private BigDecimal subjectiveScore;

    @ApiModelProperty(value = "考生考试实际开始时间")
    private LocalDateTime examBeginDate;

    @ApiModelProperty(value = "考生考试实际结束时间")
    private LocalDateTime examEndDate;

    @ApiModelProperty(value = "剩余时长(毫秒)")
    private Long remainingTime;

    @ApiModelProperty(value = "试卷题目数量")
    private Integer paperQuestionNumber;

    @ApiModelProperty(value = "考生已作答题目数量")
    private Integer candidateAnswerNumber;

    @ApiModelProperty(value = "考生登录时间")
    private LocalDateTime loginTime;

    @ApiModelProperty(value = "考生登录IP地址")
    private String loginIp;

    @ApiModelProperty(value = "考生登录地址，比如广东省深圳市")
    private String loginAddress;

    @ApiModelProperty(value = "切屏总次数")
    private Integer overScreenCount;

    @ApiModelProperty(value = "机构ID")
    private String officeId;

    @ApiModelProperty(value = "科目ID")
    private String subjectId;

    @ApiModelProperty(value = "报名照片")
    private String enrollPhoto;

    @ApiModelProperty(value = "双监控状态，0表示未验证，1表示验证通过，2表示验证不通过")
    private Integer dualMonitoringStatus;

    @ApiModelProperty(value = "是否在线考试，0(false)：否，1(true)：是")
    private Boolean onlineExamState;
    
    @ApiModelProperty(value = "作弊认定:0未阅,1确定作弊,2无作弊")
    private Integer manualReview;    
    
    @ApiModelProperty(value = "行为分析类型:0无人,1多人,2换人")
    private Integer actionAnalysisType;

    @ApiModelProperty(value = "作弊说明")
    private String cheatDescription;

    @ApiModelProperty(value = "虚拟考场id")
    private String roomId;

    @ApiModelProperty(value = "标记疑似作弊时间")
    private LocalDateTime suspectedCheatDate;

    @ApiModelProperty(value = "考生答题表是否备份1：是 0：否")
    @TableField("is_backup")
    private Integer isBackup;

    @ApiModelProperty(value = "考生事件表是否备份1：是 0：否")
    private Integer logBackup;

    @ApiModelProperty(value="是否有举手，1：是，0：否")
    private Integer handUpState;

    @ApiModelProperty(value="是否有截屏，true：是，false：否")
    @TableField("is_screen_shot")
    private Boolean screenShot;

    @ApiModelProperty(value = "姓名")
    private String name;

    @ApiModelProperty(value = "电话")
    private String phone;

    @ApiModelProperty(value = "身份证")
    private String cardNumber;

    @ApiModelProperty(value = "照片比对状态,0未比对（还未进行照片比对）、1已通过（照片比对通过）、2已跳过（人工跳过照片比对）、3未通过（照片比对未通过）")
    private Integer photoCompareState;

    @ApiModelProperty(value = "设备检测状态, 0未检测（还未进行设备检测）、1已通过（通过检测）、2已跳过、3未通过（未通过检测）4未获权（系统获取设备权限失败）")
    private Integer deviceCheckState;

    @ApiModelProperty(value = "设备检测时间")
    private LocalDateTime deviceCheckDate;

    @ApiModelProperty(value = "PC端监控状态, 0未开启（未启动主监控）、1已开启（已经开启主监控）、2已中断（已经开启但是当前状态中断）、3监控中（处于正常监控状态）")
    private Integer pcMonitorState;

    @ApiModelProperty(value = "移动监控状态, 0未开启（未启动第二监控）、1已开启（已经开启第二监控）、2已中断（已经开启但是当前状态中断）、3监控中（处于正常监控状态）")
    private Integer mobileMonitorState;

    @ApiModelProperty(value = "视频标记次数")
    private Integer videoMarkNum;

    @ApiModelProperty(value = "剩余登录次数")
    private Integer remainLoginNum;

    @ApiModelProperty(value = "是否信息修改")
    private Boolean editCandidateInfoState;

    @ApiModelProperty(value = "交卷状态, 0未交卷、1手动交卷、2强制交卷、3切屏交卷、4超时交卷")
    private Integer finishState;

    @ApiModelProperty(value = "人脸核身状态：0-未验证,1-验证通过，2-已跳过 3-申请跳过未通过")
    private Integer faceState;

    @ApiModelProperty(value="人脸认证，0失败、1成功、2跳过、3失败")
    @TableField("is_pass_face_vaild")
    private Integer isPassFaceVaild;

    @ApiModelProperty("是否加时，0-否，1-是")
    private Integer addTimeState;

    @ApiModelProperty(value = "证件类型,0-大陆居民身份证，1-港澳台身份证，2-护照")
    private String cardType;

}
